package com.wen.control;

import com.wen.bean.UserInfoBean;
import com.wen.service.IUserService;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

@Controller
public class UserController {

    // 依赖注入
    @Resource
    private IUserService userService;

    @Resource
    HttpServletRequest request;

    @RequestMapping("/login")
    public String doLogin(@RequestParam("username") String userName, @RequestParam("userpsw") String userPsw) {
        System.out.println("正在进行登录操作:" + userName + ";密码：" + userPsw);
        // 返回的视图的路径：WEB-INF/pages/logined.jsp
        // 通过springmvc的视图解析器：会自动附加 前缀 /WEB-INF/pages/ 和后缀 .jsp，所以只需要返回中间部分即可；
        request.getSession().setAttribute("userLoginedName",userName);
        return "logined";
    }

    @RequestMapping("/login2")
    public String doLogin2(UserInfoBean userInfo) {
        System.out.println("正在进行登录操作:" + userInfo.getUsername() + ";密码：" + userInfo.getUserpsw());
        // 调用service层进行业务逻辑处理
        boolean canLogin = userService.doLogin(userInfo);
        // 根据查询结果集进行跳转
        if (canLogin) {
            // 登录成功
            // 返回的视图的路径：WEB-INF/pages/logined.jsp
            // 通过springmvc的视图解析器：会自动附加 前缀 /WEB-INF/pages/ 和后缀 .jsp，所以只需要返回中间部分即可；
            HttpServletRequest request1 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
            // 设置session缓存
            request1.setAttribute("userLoginedName", userInfo.getUsername());
            return "logined";
        } else {
            // 登录失败，跳回登录页面
            return "../../index";
        }
    }

    // 推荐使用
    @RequestMapping("/login3")
    public ModelAndView doLogin3(UserInfoBean userInfo) {
        // 创建一个返回对象
        ModelAndView mav = new ModelAndView();

        System.out.println("正在进行登录操作:" + userInfo.getUsername() + ";密码：" + userInfo.getUserpsw());
        // 调用service层进行业务逻辑处理
        boolean canLogin = userService.doLogin(userInfo);
        // 根据查询结果集进行跳转
        if (canLogin) {
            // 登录成功
            // 返回的视图的路径：WEB-INF/pages/logined.jsp
            // 通过springmvc的视图解析器：会自动附加 前缀 /WEB-INF/pages/ 和后缀 .jsp，所以只需要返回中间部分即可；
            // 设置返回返回的视图的名字
            mav.setViewName("logined");
            // 使用Model进行数据缓存
            System.out.println("缓存的数据：" + userInfo.getUsername());
            mav.addObject("userLoginedName", userInfo.getUsername());
        } else {
            // 登录失败，跳回登录页面
            mav.setViewName("../../index");
        }

        // 返回值
        return mav;
    }

    @RequestMapping("/login4")
    public String doLogin4(UserInfoBean userInfo, HttpServletRequest request) {

        System.out.println("正在进行登录操作:" + userInfo.getUsername() + ";密码：" + userInfo.getUserpsw());
        // 调用service层进行业务逻辑处理
        boolean canLogin = userService.doLogin(userInfo);
        System.out.println("使用servlet注入的方式获取表单数据："+request.getParameter("username"));
        // 根据查询结果集进行跳转
        if (canLogin) {
            // 登录成功
            // 返回的视图的路径：WEB-INF/pages/logined.jsp
            // 通过springmvc的视图解析器：会自动附加 前缀 /WEB-INF/pages/ 和后缀 .jsp，所以只需要返回中间部分即可；
            // 设置返回返回的视图的名字
            // 使用Model进行数据缓存
            System.out.println("使用session缓存的数据：" + userInfo.getUsername());
            request.getSession().setAttribute("userLoginedName", userInfo.getUsername());
            return "logined";
        } else {
            // 登录失败，跳回登录页面
            return "../../index";
        }
    }



    public IUserService getUserService() {
        return userService;
    }

    public void setUserService(IUserService userService) {
        this.userService = userService;
    }
}